﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Noris.Tools.TraceVisualiser.Interface;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Forms;

namespace Noris.Tools.TraceVisualiser.TraceData
{
    internal class Func_ShowStatistics : IFunctionGlobalProvider
    {
		#region IPlugin Members
		/// <summary>
		/// Příznak, že Plugin je aktivní ve standardním běhu (tj. při běžném užiavtelském spuštění).
		/// Plně funkční pluginy tedy vrací true.
		/// Pluginy, které jsou ve vývoji, vrací false, takové jsou zobrazeny / spouštěny pouze v aplikaci, která běží v režimu Debug.
		/// </summary>
		bool IPlugin.Active { get { return true; } }
		#endregion
		#region IFunctionGlobalMenuItem Members
        void IFunctionGlobalProvider.CreateMenuItems(FunctionGlobalDeclareArgs args)
        {
            args.MenuItems.Add(new FunctionMenuItem(60, "Statistika paměti", "Zobrazí počet načtených souborů, procesů, událostí, a řádků. Pomáhá při analýze nároků na paměť.", ToolItemProperties.EnabledDependOnTrace,
                TraceVisualiser.Pics.PicLibrary16.ChartLineStacked,
                TraceVisualiser.Pics.PicLibrary22.ChartLineStacked));
        }
        /// <summary>
        /// Spuštění funkce
        /// </summary>
        /// <param name="args"></param>
        void IFunctionGlobalProvider.Run(FunctionGlobalRunArgs args)
        {
            this._ShowStatistics(args);
        }
        #endregion
        #region Výkonná metoda
        private void _ShowStatistics(FunctionGlobalRunArgs args)
        {
            TraceDataSource tds = args.CurrentTraceDataSource;
            if (tds == null) return;
            MainInfo main = tds.Main;
            if (main == null) return;

            int fileProcessedCnt = main.TraceProcessedCount;
            int nodeCnt = main.NodeRoot.NodeCount;
            int elementCnt = main.NodeRoot.NodeElementsCount;
            int processCnt = main.ProcessCount;
            int eventCnt = main.EventCount;
			int stringHeapCnt = main.StringHeap.ItemCount;

            string msg =
                "Počet zpracovaných souborů (trace): " + fileProcessedCnt.ToString() + Environment.NewLine +
                "Počet Node (řádky): " + nodeCnt.ToString() + Environment.NewLine +
                "Počet Element (prvky) celkem: " + elementCnt.ToString() + Environment.NewLine +
                "Počet Process (sessions) celkem: " + processCnt.ToString() + Environment.NewLine +
				"Počet Event (události) celkem: " + eventCnt.ToString() + Environment.NewLine +
				"Počet položek StringHeap celkem: " + stringHeapCnt.ToString();
            System.Windows.Forms.MessageBox.Show(msg, "Statistika", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
        }
        #endregion
    }
}
